// 参考代码

// import { defineStore } from "pinia";
// import { getToken, removeToken, setToken } from "../utils/token-utils";
// import type { UserInfoState } from "./interface";
// import { ElMessage } from "element-plus";
// import { allAsyncRoutes, anyRoute, staticRoutes } from "@/router/routes";
// import userApi from "@/api/userInfo";
// import type { LoginParamsData, UserInfoData } from "@/api/userInfo";
// import type { RouteRecordName, RouteRecordRaw } from "vue-router";
// import router from "@/router";
// import cloneDeep from "lodash/cloneDeep";
// // pinia的state是一个函数，函数的形参和返回值类型要确定

// interface UserInfoStoreStateData {
//   token: string | null;
//   userInfo: UserInfoData;
//   menuRoutes: RouteRecordRaw[];
// }

// function filterAsyncRoutes(allAsyncRoutes: RouteRecordRaw[], routes: string[]) {
//   let res = allAsyncRoutes.filter((item) => {
//     if (routes.indexOf(item.name as string) !== -1) {
//       // 过滤二级
//       if (item.children && item.children.length) {
//         item.children = filterAsyncRoutes(item.children, routes);
//       }
//       return true;
//     }
//   });
//   return res;
// }

// // function filterAsyncRoutes(
// //   allAsyncRoutes: RouteRecordRaw[],
// //   routeNames: string[]
// // ) {
// //   let res = allAsyncRoutes.filter((item) => {
// //     // console.log(item);
// //     // 过滤一级
// //     if (routeNames.indexOf(item.name as string) !== -1) {
// //       // 过滤二级，递归不要考虑过程，只看结果
// //       if (item.children && item.children.length) {
// //         item.children = filterAsyncRoutes(item.children, routeNames);
// //       }
// //       return true;
// //     }
// //   });
// //   return res;
// // }
// function addRoutes(routes: RouteRecordRaw[]) {
//   routes.forEach((item) => {
//     router.addRoute(item);
//   });
// }
// function resetRouter() {
//   // 获取到路由器中所有路由
//   let routes = router.getRoutes();
//   // 遍历所有路由，删除，把staticRoutes再添加一遍
//   routes.forEach((item) => {
//     router.removeRoute(item.name as RouteRecordName);
//   });
//   addRoutes(staticRoutes);
// }
// export const useUserInfoStore = defineStore("userInfo", {
//   state(): UserInfoStoreStateData {
//     return {
//       // token: getToken() as string,//自动登录
//       token: "", //每次都要登陆
//       userInfo: {
//         routes: [],
//         buttons: [],
//         roles: [],
//         name: "",
//         avatar: "",
//       },
//       menuRoutes: [],
//     };
//   },

//   actions: {
//     async login(loginParams: LoginParamsData) {
//       try {
//         const result = await userApi.userLogin(loginParams);
//         this.token = result.token;
//         localStorage.setItem("token_key", result.token);
//         return "ok";
//       } catch (error) {
//         return Promise.reject(error);
//       }
//     },

//     async getUserInfo() {
//       try {
//         const result = await userApi.getUserInfo();
//         this.userInfo = result;

//         // 根据routes和allAsyncRoutes过滤相同的
//         let userAsyncRoutes = filterAsyncRoutes(
//           cloneDeep(allAsyncRoutes),
//           result.routes
//         );
//         // 动态注册路由器
//         // vue2中：router.addRoutes(数组)一次性把多个路由动态添加注册到路由器
//         // vue3中：router.addRoute,每次只能加一个
//         // push只能加一个
//         addRoutes(userAsyncRoutes.concat(anyRoute));
//         // 把需要遍历的路由数据改为当前路由器中注册的路由数据
//         // console.log(userAsyncRoutes);

//         this.menuRoutes = staticRoutes.concat(userAsyncRoutes, anyRoute);
//         return "ok";
//       } catch (error) {
//         return Promise.reject(error);
//       }
//     },

//     async reset() {
//       // 删除local中保存的token
//       removeToken();
//       // 提交重置用户信息的mutation
//       this.token = "";
//       Object.assign(this.userInfo, {
//         routes: [],
//         buttons: [],
//         roles: [],
//         name: "",
//         avatar: "",
//       });
//       localStorage.removeItem("token_key");
//     },
//     async logout() {
//       try {
//         await userApi.userLogout();
//         this.reset();
//         resetRouter();
//         return "ok";
//       } catch (error) {
//         return Promise.reject(error);
//       }
//     },
//   },
// });
